From d2a07b233c84dfd122bb1605c27e3f467f40babc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pekka=20J=C3=A4=C3=A4skel=C3=A4inen?= Date: Thu, 4 Oct 2018 17:20:51 +0300 Subject: [PATCH] [PATCH] Fix kernel debug data emission It is now (again) generated with the OpenCL standard build option -g. Gbp-Pq: Name 0002-Fix-kernel-debug-data-emission.patch --- lib/CL/pocl_build.c | 3 ++- lib/CL/pocl_llvm_build.cc | 6 ------ lib/llvmopencl/Workgroup.cc | 2 ++ lib/llvmopencl/linker.cpp | 27 ++++++++++++++------------- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/CL/pocl_build.c b/lib/CL/pocl_build.c index 91dd2c9..d4c93ef 100644 --- a/lib/CL/pocl_build.c +++ b/lib/CL/pocl_build.c @@ -273,7 +273,8 @@ process_options (const char *options, char *modded_options, char *link_options, else if (memcmp (token, "-g", 2) == 0) { #ifndef LLVM_OLDER_THAN_3_8 - token = "-debug-info-kind=line-tables-only"; + token = "-dwarf-column-info -debug-info-kind=limited " \ + "-dwarf-version=4 -debugger-tuning=gdb"; #endif } else if (memcmp (token, "-D", 2) == 0 || memcmp (token, "-I", 2) == 0) diff --git a/lib/CL/pocl_llvm_build.cc b/lib/CL/pocl_llvm_build.cc index 601eb72..c2b4244 100644 --- a/lib/CL/pocl_llvm_build.cc +++ b/lib/CL/pocl_llvm_build.cc @@ -537,9 +537,6 @@ int pocl_llvm_build_program(cl_program program, #ifdef LLVM_OLDER_THAN_3_9 (*mod)->setPICLevel(PICLevel::Large); -#else - (*mod)->setPICLevel(PICLevel::BigPIC); - (*mod)->setPIELevel(PIELevel::Large); #endif @@ -635,9 +632,6 @@ int pocl_llvm_link_program(cl_program program, unsigned device_i, linked_module->setDataLayout(libmodule->getDataLayout()); #ifdef LLVM_OLDER_THAN_3_9 linked_module->setPICLevel(PICLevel::Large); -#else - linked_module->setPICLevel(PICLevel::BigPIC); - linked_module->setPIELevel(PIELevel::Large); #endif #else diff --git a/lib/llvmopencl/Workgroup.cc b/lib/llvmopencl/Workgroup.cc index f5a7f2c..413d2dd 100644 --- a/lib/llvmopencl/Workgroup.cc +++ b/lib/llvmopencl/Workgroup.cc @@ -677,6 +677,8 @@ static Function *createLauncher(Module &M, Function *F, replacePrintfCalls(pb, pbp, pbc, true, poclPrintf, M, L, printfCache); } + L->setSubprogram(F->getSubprogram()); + return L; } diff --git a/lib/llvmopencl/linker.cpp b/lib/llvmopencl/linker.cpp index 4a73379..7950856 100644 --- a/lib/llvmopencl/linker.cpp +++ b/lib/llvmopencl/linker.cpp @@ -343,20 +343,21 @@ static void shared_copy(llvm::Module *program, const llvm::Module *lib, llvm::Module::const_named_metadata_iterator mi,me; for (mi=lib->named_metadata_begin(), me=lib->named_metadata_end(); mi != me; mi++) { - const NamedMDNode &NMD=*mi; - /* This causes problems, because multiple wchar_size */ - if (NMD.getName() == StringRef("llvm.module.flags")) - continue; - /* This causes problems with NVidia, - * and is regenerated by pocl-ptx-gen anyway */ - if (NMD.getName() == StringRef("nvvm.annotations")) - continue; - DB_PRINT(" %s:\n", NMD.getName().data()); - NamedMDNode *NewNMD=program->getOrInsertNamedMetadata(NMD.getName()); - for (unsigned i=0, e=NMD.getNumOperands(); i != e; ++i) - NewNMD->addOperand(MapMetadata(NMD.getOperand(i), vvm)); + const NamedMDNode &NMD = *mi; + // This causes problems with NVidia, and is regenerated by pocl-ptx-gen + // anyway. + if (NMD.getName() == StringRef("nvvm.annotations")) + continue; + DB_PRINT(" %s:\n", NMD.getName().data()); + if (NamedMDNode *Old = program->getNamedMetadata(NMD.getName())) { + // Let's not overwrite existing metadata such as llvm.module.flags and + // opencl.ocl.version. + continue; + } + NamedMDNode *NewNMD = program->getOrInsertNamedMetadata(NMD.getName()); + for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i) + NewNMD->addOperand(MapMetadata(NMD.getOperand(i), vvm)); } - } int link(llvm::Module *program, const llvm::Module *lib, std::string &log) { -- 2.30.2